package ProjectoX;

import java.awt.Rectangle;

public class KoopaTroopaMuerto extends Enemigo{
	protected static final int ENEMY_SPEED = 6;
	protected boolean enTierra;
	protected String [] NombresSpriteMov;
	protected String [] NombresSpriteMovIz;
	final private int AltoIm = 35;
	final private int AnchoIm = 43;
	final protected int AltoC = 50; //BORRAR DSP!
	final protected int AnchoC = 50;
	private boolean puedeatacar = true;
	
	public KoopaTroopaMuerto (Nivel nivel, Posicion pos) {
		super(nivel);
		NombresSpriteMov = new String [] {"Koopa/koopaM.png"};
		NombresSpriteMovIz = new String [] {"Koopa/koopaM_iz.png"};
		Pos = pos;
		enTierra = true;
		GetMov().setMovHorizontal(0);
		GetMov().setMovVertical(ENEMY_SPEED);
		setSpriteName(NombresSpriteMov);
		setFrameSpeed(35);
	}
	
	public void colision (Enemigo E) {
		if (puedeatacar){
			puedeatacar = false;
			new Reminder(1,this); //Creo un delay
			E.remove();
		}	
	}
	
	public void colision (Componente C) {
		Rectangle r1 = C.getBounds();
		Rectangle Area = r1.intersection(this.getBounds());
		if ((Area.getHeight()<=8)) {
			if ((Area.getWidth()>8)) {
			if (Area.getY()<C.getPos().getY()+30){
				if (Mov.getVelY()>0)
					detenerSalto(C);
				}
			else invertirSalto();
		}}
		else {
			if (Area.getX()<C.getPos().getX()+30){
				Pos.setX(C.getPos().getX()-AnchoIm);
				GetMov().setMovHorizontal(-ENEMY_SPEED);
				setSpriteName(NombresSpriteMovIz);
			}				
			else {
				Pos.setX(C.getPos().getX()+AnchoC+1);
				GetMov().setMovHorizontal(ENEMY_SPEED);
				setSpriteName(NombresSpriteMov);
			}				
		}
	}
	
	private void invertirSalto() {
		GetMov().setMovVertical(ENEMY_SPEED);	
	}
	
	private void detenerSalto(Componente C) {
		Pos.setY(C.getPos().getY()-AltoIm+1);
		enTierra= true;
		GetMov().setMovVertical(0);
	}
	
	public void actuar() {
		super.actuar();
		Pos.setX(Pos.getX()+GetMov().getVelX());
		Pos.setY(Pos.getY()+GetMov().getVelY());
		if (enTierra)
			GetMov().setMovVertical(ENEMY_SPEED);
		enTierra = false;
	}
	
	public void remove() {
		super.remove();
		miNivel.incrementarPuntaje(90);
	}

	public void morir() {
		GetMov().setMovHorizontal(0);
	}
	
	public void colision(Mario M) {
	if (puedeatacar){
		new Reminder(1,this); //Creo un delay
		if (M.esInvencible()) {
			M.matar(this);
			puedeatacar = false;
		} else {
			if (GetMov().getVelX()==0) {
				if (M.GetMov().getVelX()>0)
					GetMov().setMovHorizontal(ENEMY_SPEED);
				else
					GetMov().setMovHorizontal(-ENEMY_SPEED);
				Pos.setX(Pos.getX()+GetMov().getVelX());
			}
			else {
				puedeatacar=false;
				if ((getPos().getY()-M.getPos().getY())>34){
					M.matar(this);
				}
				else {
					M.remove();
					miNivel.incrementarPuntaje(-45);
				}
			}	
		}
		}
	}
	
	public void colision(MarioGrande M) {
	if (puedeatacar){
		if (M.esInvencible()) {
			M.matar(this);
			puedeatacar = false;
			new Reminder(1,this); //Creo un delay
		} else {
			if (GetMov().getVelX()==0) {
				if (M.GetMov().getVelX()>0)
					GetMov().setMovHorizontal(ENEMY_SPEED);
				else
					GetMov().setMovHorizontal(-ENEMY_SPEED);
				Pos.setX(Pos.getX()+GetMov().getVelX());
			}
			else {
				puedeatacar=false;
				if ((getPos().getY()-M.getPos().getY())>34){
					M.matar(this);
					new Reminder(1,this); //Creo un delay
				}
				else {
					new Reminder(5,this); //Creo un delay
					miNivel.deboDesCrecer();
				}
			}	
		}
		}
	}
	
	public void colision(MarioDisparo M) {
	if (puedeatacar){
		if (M.esInvencible()) {
			M.matar(this);
			puedeatacar = false;
			new Reminder(1,this); //Creo un delay
		} else {
			if (GetMov().getVelX()==0) {
				if (M.GetMov().getVelX()>0)
					GetMov().setMovHorizontal(ENEMY_SPEED);
				else
					GetMov().setMovHorizontal(-ENEMY_SPEED);
				Pos.setX(Pos.getX()+GetMov().getVelX());
			}
			else {
				puedeatacar=false;
				if ((getPos().getY()-M.getPos().getY())>34){
					M.matar(this);
					new Reminder(1,this); //Creo un delay
				}
				else {
					miNivel.deboDesDisparar();	
					new Reminder(5,this); //Creo un delay
				}
			}	
		}
		}
	}
	
	public void puedeatacar() {
		puedeatacar =true;
	}

}
